# python中内置的高阶函数（二）
"""
三、filter函数
python内建的filter（）函数用于过滤序列，和map（）函数类似，
filter（）也接收一个函数和一个序列，但是不同是filter（）把传入的函数依次作用于每个元素，
然后根据返回值是True还是False决定元素的保留与丢弃。
"""
lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 留下偶数
print(filter(lambda n: n % 2 == 0, lst1))  # 返回filter对象
print(list(filter(lambda n: n % 2 == 0, lst1)))  # 返回[2, 4, 6, 8, 10]

"""
四、sorted函数
python内置的sorted（）函数就可以对list进行排序；和序列中本身的sort函数类似。
"""
# 需要给某个复杂的列表排序
lst = [
    {'name': '张三', 'age': 34},
    {'name': '李四', 'age': 16},
    {'name': '王五', 'age': 41},
]
# 根据年龄来排序
# lst.sort(key=lambda item: item['age'], reverse=True)  # 使用lambda,和序列中本身的sort函数--降序排序
# print(lst)
# 使用内置函数sorted
print(sorted(lst, key=lambda item: item['age'], reverse=True))

# 字符串排序
str_lst = ['hello', 'Java', 'Zoo', 'world']
print(sorted(str_lst, key=str.upper))
# 此处upper后面不加(),因为此处不是调用函数，而是把upper函数作为参数传给sorted函数，
# sorted函数内会自动调用upper函数，将每个元素传入到upper函数中

"""
默认情况下，对字符串排序，是按照ASCII的大小比较的，由于'Z'<'a'，结果，大写字母Z会排在小写字母a的前面。
所以，需要忽略大小写来比较两个字符串，实际上就是先把字符串都变成大写（或者都变成小写）再比较。
"""
